【完全版】pythonでMDFファイルのCANデータをcsv化する

您所在的位置:网站首页 python cantools 【完全版】pythonでMDFファイルのCANデータをcsv化する

【完全版】pythonでMDFファイルのCANデータをcsv化する

#【完全版】pythonでMDFファイルのCANデータをcsv化する| 来源: 网络整理| 查看: 265

VectorのCANapeやCANoeで取得したMDFファイル(MF4ファイル)をpythonの

mdfreaderとpandasを使うことで、csv化することができます。

CANデータをcsv化して自動化したい方は必見です!

pythonのmdfreaderとpandasを連携させてMDFファイルを読み込むpythonでMDFファイルを使う準備使い方レコーディングしたシグナル一覧を抽出するcsv化したいシグナルの一覧を作成する対象のシグナルをcsv化する pythonのmdfreaderとpandasを連携させてMDFファイルを読み込む

まずは、pythonのインストールが必要です。

下記記事の中でわかりやすく紹介しているのでインストールをしましょう

【初心者 入門】pythonをインストールしてエクセルを自動化する【5日で達成できる】プログラミング未経験の初心者がpythonをインストールしてエクセルの仕事を自動化する方法を解説します。超初心者でも簡単にコードが作成できますので、これからプログラミングを始めたい方にオススメです。syachiku-python.com2021.05.07 pythonでMDFファイルを使う準備

mdfreaderのinstallが必要となるため、cmdを起動して

下記内容をコピペで貼り付けしましょう!

>>pip install mdfreader

他に必要なものも全て一緒にインストールしてくれます。 

  

※もしインストールのときにbitarrayのインストールでerrorが出た場合は、

 下記リンク先の情報が勉強になりました。 

エラーに書いてある通り「Visual C++ Build Tools 」をインストールすることで解決しました。

python pip実行時に「error: Microsoft Visual C++ 14.0 is required. Get it with “Build Tools for Visual Studio”」が発生した場合の対処法

使い方

① レコーディングしたシグナル一覧を抽出する② csv化したいシグナルの一覧を作成する③ 対象のシグナルをcsv化する

レコーディングしたシグナル一覧を抽出する

下記内容で抽出できます。

mdfreaderをインスタンス化して、list_channelsに渡すことで抽出できます。

これをcsvで書き出します。

# -*- coding: utf-8 -*- import pandas as pd import mdfreader def mf4_all_signal_list(fname): yop = mdfreader.MdfInfo() df = pd.DataFrame(yop.list_channels(fname)) df.to_csv("list.csv") if __name__ == "__main__": fname = "Demo.mf4" mf4_all_signal_list(fname)

csv化したいシグナルの一覧を作成する

csv化したいシグナル一覧を作成するために1つcsvファイルを作成しましょう。

その中に、上記で抽出したシグナルの中から、書き出ししたいシグナルをcsvに書き足していきます。

最終的には、読み込んだmdfreaderインスタンスのchannel_listの引数として

下記のようなlist形式で読み込ませる必要があります。

[‘sample_signal_1’, ‘sample_signal_2’]

>>inst = mdfreader.Mdf(fname, channel_list=signal_name, convert_after_read=False, metadata=2)

# -*- coding: utf-8 -*- def Target_list(fname): list_data = pd.read_csv(fname).values.tolist() list_data = [flatten for inner in list_data for flatten in inner] print(list_data) return list_data if __name__ == "__main__": signal_list = Target_list("list.csv")

5行目の内包表現をつかうことで、書き出ししたいシグナルリストをうまく

既定のlistフォーマットにすることができます。

対象のシグナルをcsv化する

下記で対象となるMDF(MF4)ファイルを読み込み sampling周期を0.01[s]でdataframe化します。

>>inst = mdfreader.Mdf(ファイル名, channel_list=シグナルリスト, convert_after_read=False, metadata=2)

>>df = inst.convert_to_pandas(sampling=0.01)

 

※ちなみにおまけ情報ですが、下記でMDFに記録されたコメントも書き出すことができます。

>>text = inst.fileMetadata[‘comment’]

# -*- coding: utf-8 -*- import pandas as pd import mdfreader def mf4_all_signal_list(fname): yop = mdfreader.MdfInfo() df = pd.DataFrame(yop.list_channels(fname)) df.to_csv("list.csv") def Target_list(fname): list_data = pd.read_csv(fname).values.tolist() list_data = [flatten for inner in list_data for flatten in inner] print(list_data) return list_data def mf4_to_csv(fname, signal_name): inst = mdfreader.Mdf(fname, channel_list=signal_name, convert_after_read=False, metadata=2) df = inst.convert_to_pandas(sampling=0.01) df.to_csv(fname+".csv") # ついでにMDFに記録されたコメントも書き出す text = inst.fileMetadata['comment'] print (text,file=codecs.open(fname+".txt", 'w', 'utf-8')) if __name__ == "__main__": fname = "Demo.mf4" # mf4_all_signal_list(fname) signal_list = Target_list("list.csv") mf4_to_csv(fname, signal_list)

 

これで以上になります。

質問はTwitterから受け付けていますので、お気軽にどうぞ

>>pythonで生き延びる社畜(@coin_python) | Twitter

ラジオ放送でもエンジニアについて熱く語っています。こちらもお楽しみください

>>社畜戦士のエンジニアを熱く語るラジオ | stand.fm

 

同じくVector製品のblfファイルもcsv化してみる

【完全版】pythonでblfファイルのCANデータをcsv化する【詳細解説付き】python でblfデータを読み取るサンプルと丁寧な解説です。Pandasと連携しcsvにする方法をご紹介します。CANalyzerやMATLABを普段使う方はぜひご覧くださいsyachiku-python.com2020.06.22

プログラミング学習者へのオススメ記事

プログラミングが独学でも教室でも出来ない人の特徴3選【やる気が0になる前に】本記事では、現役エンジニアの私が「過去に自分がプログラミングを諦めかけた勘違いと解決方法」を紹介します。PythonやHTML/CSSなどプログラミング学習を諦めかけている人は、ぜひ記事をご覧ください。syachiku-python.com2021.04.30

エンジニア志望者へのオススメ記事

【無料公開】システムエンジニアの仕事内容を1年で完全習得する方法システムエンジニアの仕事の基本を1年で完全習得できる方法知りたいですか?本記事では、私の現場経験から3つの大切なスキルと、学習方法を記載しました。専門知識、資料/説明、英語です。転職や新卒でこれからシステムエンジニアになりたい方は是非記事をご覧くださいsyachiku-python.com2021.04.18


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3